// wgal.h - WGAL header file
#ifndef WGAL_H
#define WGAL_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <wgal/common.h>

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

typedef WGALVoid (*WGALDrawProc)();
typedef WGALVoid (*WGALUpdateProc)(WGALUInt32);
typedef WGALBool (*WGALCommandProc)();

// struct definition
typedef struct tagWGALStartupInfo
{
	WGALString title;
	WGALDrawProc draw_proc;
	WGALUpdateProc update_proc;
	WGALUInt32 width;
	WGALUInt32 height;
	WGALUInt32 icon_id;
	WGALFloat interval;
	WGALBool fullscreen;
} WGALStartupInfo, *WGALStartupInfoPtr;

typedef struct tagWGALStartupInfoEx
{
	WGALString title;
	WGALDrawProc draw_proc;
	WGALUpdateProc update_proc;
	WGALUInt32 width;
	WGALUInt32 height;
	WGALUInt32 icon_id;
	WGALFloat interval;
	WGALBool fullscreen;
	WGALInt32 btn_minimize;
	WGALInt32 btn_maximize;
	WGALInt32 btn_close;
	/* parameters below are optional */
	WGALCommandProc on_minimize;
	WGALCommandProc on_maximize;
	WGALCommandProc on_close;
	WGALCommandProc on_command;
} WGALStartupInfoEx, *WGALStartupInfoExPtr;

// basic function definition
WGALVoid wgalMain();
WGALAPI WGALBool wgalInit();
WGALAPI WGALVoid wgalDeinit();
WGALAPI WGALBool wgalSetup(WGALStartupInfoPtr wsi);
WGALAPI WGALBool wgalSetupEx(WGALStartupInfoExPtr wsi);
WGALAPI WGALInt32 wgalStart();
WGALAPI WGALVoid wgalExit();
WGALAPI WGALInt32 wgalGetReturnValue();
WGALAPI WGALVoid wgalSetAutoPresent(WGALBool automatic);
WGALAPI WGALBool wgalIsAutoPresent();
WGALAPI WGALBool wgalSetFullscreen(WGALBool fullscreen);
WGALAPI WGALBool wgalToggleFullscreen();
WGALAPI WGALBool wgalIsFullscreen();
WGALAPI WGALBool wgalIsActive();
WGALAPI WGALVoid wgalShowCursor(WGALBool show);
WGALAPI WGALBool wgalIsCursorVisible();

#ifdef __cplusplus
}
#endif // __cplusplus

// include headers of each components
#include <wgal/gfx.h>
#include <wgal/util.h>
#include <wgal/res.h>
#include <wgal/input.h>
#include <wgal/conf.h>

#endif // !WGAL_H